/* 
 * File:   Finder.cpp
 * Author: vicror
 * 
 * Created on October 21, 2011, 6:50 PM
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files
 * (the "Software"), to deal in the Software without restriction,
 * including without limitation the rights to use, copy, modify, merge,
 * publish, distribute, sublicense, and/or sell copies of the Software,
 * and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

#include "Finder.h"
#include <iostream>
namespace SearchEnginer {
    Finder::Finder():Base_SearchEnginer() {
    }

    Finder::Finder(const Base_SearchEnginer& orig) :Base_SearchEnginer(orig){
        link(orig);
    }

    Finder::~Finder() {
    }

    ListIndex Finder::hasWordByID(const string& orig) const {
        ListIndex list;
        FinderItem temp;
        FinderItem::ListItemTConstIter beg;
        FinderItem::ListItemTConstIter ser(&root);
        string::const_iterator itr = orig.begin();
        if (itr != orig.end()) {
            do {
                temp.setLetter(*itr);
                beg = ser;
                ser = beg->getSearchItr(temp);
                ++itr;
            } while(ser != beg->end() && itr != orig.end());
            if (ser != beg->end() && ser->index() >= 0 ) {
                list.push_back(ser->index());
            }
        }
        return list;

    }

    void Finder::syncWord(const string& orig, Index index) {
        FinderItem temp;
        FinderItem::ListItemTItr beg(&root);
        for (string::const_iterator itr = orig.begin(); itr != orig.end(); ++itr) {
            temp.setLetter(*itr);
            FinderItem::ListItemTItr ser = beg->getSearchItr(temp);
            if (ser != beg->end()) {
                beg=ser;
            } else {
                beg->append(temp);
                beg = beg->getSearchItr(temp);
            }

            
        }
        beg->setIndex(index);
        
    }

    void Finder::OnClear() {
        root.clear();

    }

}